package easy

import (
	. "GoLeetcode/common"
	"strings"
)

/*
时间复杂度:O(N)
空间复杂度:O(1)

解1: k用来遍历字符串s，l/r分别指向每一个被空格分隔的字符串的左右边界
*/

func reverseWords(s string) string {
	n := len(s)
	k := 0
	rs := []rune(s)
	for k < n {
		l := k
		for k < n && rs[k] != ' ' {
			k++
		}
		r := k - 1
		for l < r {
			rs[l], rs[r] = rs[r], rs[l]
			l++
			r--
		}
		k++
	}
	return string(rs)
}

/*
时间复杂度:O(N)
空间复杂度:O(1)

解2: 先根据空格拆分，然后对每个字符串进行反转，最后join合并
*/

func reverseWords1(s string) string {
	sArr := strings.Split(s, " ")
	for i, s := range sArr {
		sArr[i] = Reverse(s)
	}
	return strings.Join(sArr, " ")
}